#coding=utf-8
#LightCam Mongo数据清理脚本
#init by hfh 20150305

import socket,os,time,re
import lc_libs
import multiprocessing,subprocess,traceback,sys


def func(dbname,tablename,keeptime,interval,field):

	
	while True:
		try:
			#使用数据库
			operdb=db.useDatabase(dbname)
			opertable=db.UseCollection(operdb,tablename)

			#数据库更新
			opertime=int(time.time())-int(keeptime)
			expr={'$lt':opertime}
			exprcont={field:expr}


			db.deleteData(opertable,exprcont)

		except Exception:
			excinfo=traceback.format_exc()
			logdate=time.strftime('%Y-%m-%d %H:%M:%S',time.localtime())
			logfile.write(logdate+" :\n"+excinfo+"\n")
			logfile.flush()
			time.sleep(1)
		#等待
		time.sleep(int(interval))


if __name__ == "__main__":

	lchome=lc_libs.lc_getlchome()
	scname=sys.argv[0].split('.')[0]
	logfilename=lchome+'/log/'+scname+'.log'
	confname=lchome+'/conf/'+scname+'.conf'
	
	today=time.strftime('%Y%m%d',time.localtime())
	os.system("mv %s %s.%s" % (logfilename,logfilename,today))
	
	logfile=file(logfilename,'a')
	logdate=time.strftime('%Y-%m-%d %H:%M:%S',time.localtime())
	logfile.write(logdate+" Started.\n")
	logfile.flush()
	
	agent_hostname=lc_libs.lc_gethostname()
	
	pool = multiprocessing.Pool(processes=1)
	result = []

	try:
		#初始化数据库
		
		db=lc_libs.lc_mongodb_operater('127.0.0.1',27017)

		db.connect()
		Conn=db.getConn()
		if Conn==None:
			print "Can not Connect to the MondbDB"
			exit(0)

	except Exception:
		excinfo=traceback.format_exc()
		logdate=time.strftime('%Y-%m-%d %H:%M:%S',time.localtime())
		logfile.write(logdate+" 初始化数据库失败:\n"+excinfo+"\n")
		logfile.flush()
		exit(0)

	#主程序
	for line in open("../conf/lc_mongo_trigger.conf"):
		
		args=line.strip('\n').split("\t")
		hostname=args[0]

		if line[0] == '#' or line.split("\t")[0] not in (agent_hostname,'default'):
			continue
		
		dbname=args[1]
		tablename=args[2]
		keeptime=lc_libs.lc_returnseconds(args[3])
		#print "keeptime:"+str(keeptime)
		interval=lc_libs.lc_returnseconds(args[4])
		#print "interval:"+str(interval)
		field=args[5]
		#print "field:"+str(field)

			
		pool = multiprocessing.Pool(processes=1)
		result.append(pool.apply_async(func, (dbname,tablename,keeptime,interval,field)))

	pool.close()
	pool.join()
	print result
